// API接口基础配置
const BASE_URL = "http://47.105.49.190:8080/api";
// 图片服务器地址前缀
const IMAGE_SERVER = "http://47.105.49.190:8080";

/**
 * 封装请求方法
 * @param {Object} options - 请求配置
 * @param {String} options.url - 接口路径
 * @param {String} options.method - 请求方法 GET/POST/PUT/DELETE
 * @param {Object} options.data - 请求数据
 * @param {Boolean} options.showLoading - 是否显示加载提示
 * @param {Boolean} options.auth - 是否需要携带token
 * @returns {Promise} 请求结果Promise
 */
function request(options) {
  const {
    url,
    method = "GET",
    data,
    showLoading = true,
    auth = true,
  } = options;

  // 显示加载提示
  if (showLoading) {
    wx.showLoading({
      title: "加载中",
      mask: true,
    });
  }

  // 构建请求头
  const header = {
    "Content-Type": "application/json",
  };

  // 如果需要认证，添加token
  if (auth) {
    const token = wx.getStorageSync("token");
    if (token) {
      header["Authorization"] = `Bearer ${token}`;
    }
  }

  // 添加请求调试日志
  const fullUrl = `${BASE_URL}${url}`;
  console.log(`发起请求: ${method} ${fullUrl}`, data);

  // 返回Promise对象
  return new Promise((resolve, reject) => {
    wx.request({
      url: fullUrl,
      method,
      data,
      header,
      success(res) {
        console.log(`请求响应: ${method} ${fullUrl}`, res);
        if (res.statusCode === 200) {
          // 检查业务状态码
          if (res.data.code === 200) {
            resolve(res.data);
          } else {
            // 业务错误
            // 如果是401未授权，尝试跳转到登录页
            if (res.data.code === 401) {
              wx.redirectTo({
                url: "/pages/registration/registration",
              });
            }
            reject({
              message: res.data.message || "请求失败",
              ...res.data,
            });
          }
        } else {
          // HTTP错误
          reject({
            statusCode: res.statusCode,
            message: "服务器异常",
          });
        }
      },
      fail(err) {
        console.error(`请求失败: ${method} ${fullUrl}`, err);
        reject({
          message: "网络错误",
          ...err,
        });
      },
      complete() {
        if (showLoading) {
          wx.hideLoading();
        }
      },
    });
  }).catch((err) => {
    // 统一错误处理
    wx.showToast({
      title: err.message || "请求失败",
      icon: "none",
    });
    return Promise.reject(err);
  });
}

// 导出HTTP请求方法
module.exports = {
  // 基础地址和图片服务器地址
  BASE_URL,
  IMAGE_SERVER,

  // 封装的HTTP请求方法
  request,

  // 快捷方法
  get(url, data, options = {}) {
    return request({
      url,
      method: "GET",
      data,
      ...options,
    });
  },

  post(url, data, options = {}) {
    return request({
      url,
      method: "POST",
      data,
      ...options,
    });
  },

  put(url, data, options = {}) {
    return request({
      url,
      method: "PUT",
      data,
      ...options,
    });
  },

  delete(url, data, options = {}) {
    return request({
      url,
      method: "DELETE",
      data,
      ...options,
    });
  },
};
